/*
    NAME: mspunsol.h

    PURPOSE:
        This file contains MSPP Event IDs and definitions for
                buffers appended in the unsolicited events.

  Copyright (c) 2004  NMS Communications Corp.  All rights reserved.

*/

#ifndef MSPUNSOL_H
#define MSPUNSOL_H

#include "mspcmd.h"
#include "nmstypes.h"
#include "msptypes.h"

/************************************************************************\
 *                      MSPP UNSOLICITED EVENT IDs                      *
 *                     Range: 0x001b2300 - 0x001b23ff                   *
 *                                                                      *
\************************************************************************/

#define MSPEVN_UNSOL_MIN              0x001b2300  /* Minimum            */
#define MSPEVN_UNSOL_MAX              0x001b23FF  /* Maximum            */
#define MSPEVN_RTCP_REPORT            0x001b2300  /* RTCP report        */
#define MSPEVN_DPF_DEBUG_REPORT       0x001b2301  /* DPF Debug report   */
#define MSPEVN_T38_PACKET_DETECTED    0x001b2302  /* First T38 pkt detect event */
#define MSPEVN_FAXRELAY_FAX_BEGIN     0x001b2303  /* Fax Begin event    */
#define MSPEVN_FAXRELAY_FAX_END       0x001b2304  /* Fax End event      */
#define MSPEVN_FAXRELAY_PASSED_PAGE   0x001b2305  /* Passed page event  */
#define MSPEVN_RTCP_BAD_REPORT        0x001b2306  /* Malformed RTCP report received */
#define MSPEVN_NOROUTE_AVAILABLE      0x001b2307  /* Ethernet Unavailable */
#define MSPEVN_ROUTE_AVAILABLE        0x001b2308  /* Ethernet Available */
#define MSPEVN_DPF_DTMF_REPORT        0x001b2309  /* DPF DTMF report   */
#define MSPEVN_RFC2833_REPORT         0x001b230A  /* RTP endpoint RFC 2833 report   */
#define MSPEVN_JITTER_DEBUG_REPORT    0x001b230B  /* Jitter Debug report   */
#define MSPEVN_DPF_DTMF_PLAY_END      0x001b230C  /* DPF DTMF report   */
#define MSPEVN_MUX_PMSYNC_STARTED     0x001b230D  /* MUX EP: PM Sync Started   */
#define MSPEVN_MUX_PMSYNC_STOPPED     0x001b230E  /* MUX EP: PM Sync Stopped   */
#define MSPEVN_MUX_GET_H245_MSG       0x001b230F  /* MUX EP: H.245 MSG is received   */
#define MSPEVN_DEMUX_PERIODIC_STATS   0x001b2310  /* DEMUX EP STAT on errors */
#define MSPEVN_DEMUX_CRC_ERR_REPORT   0x001b2311  /* DEMUX EP crc errors event*/
#define MSPEVN_VIDEO_RX_STOPPED       0x001b2312  /* RTP video EP RX shutdown done: end-of-frame */
#define MSPEVN_VIDEO_IFRAME_H324      0x001b2313  /* RTP video EP received I-Frame from H.324M */
#define MSPEVN_VIDEO_IFRAME_RTPIP     0x001b2314  /* RTP video EP received I-Frame from RTP/IP */
#define MSPEVN_SKEW_OFFSET            0x001b2315  /* Skew offset for aud/vid synchronization */
#define MSPEVN_REACH_VIDEOLATENCY_LIMIT   0x001b2316 /* inform application that the jitter buffer is build up for the limit*/

/* ****!!!!  (Strip the following from customer release) */
/*-----------------------------------------------------------------------------
  mspGetText() Macro.
    - Converts MSP Service event code to its corresponding ASCII macro identifier.
  ---------------------------------------------------------------------------*/
#define TEXTCASE(e) case e: return #e

/* IMPORTANT:                                               
 * When adding events, don't forget to update this list !!!
 */
#define MSP_UNSOL_EVENTS() \
TEXTCASE (MSPEVN_RTCP_REPORT); \
TEXTCASE (MSPEVN_DPF_DEBUG_REPORT); \
TEXTCASE (MSPEVN_T38_PACKET_DETECTED); \
TEXTCASE (MSPEVN_FAXRELAY_FAX_BEGIN); \
TEXTCASE (MSPEVN_FAXRELAY_FAX_END); \
TEXTCASE (MSPEVN_FAXRELAY_PASSED_PAGE); \
TEXTCASE (MSPEVN_RTCP_BAD_REPORT); \
TEXTCASE (MSPEVN_NOROUTE_AVAILABLE); \
TEXTCASE (MSPEVN_ROUTE_AVAILABLE); \
TEXTCASE (MSPEVN_DPF_DTMF_REPORT); \
TEXTCASE (MSPEVN_RFC2833_REPORT); \
TEXTCASE (MSPEVN_JITTER_DEBUG_REPORT); \
TEXTCASE (MSPEVN_DPF_DTMF_PLAY_END); \
TEXTCASE (MSPEVN_MUX_PMSYNC_STARTED); \
TEXTCASE (MSPEVN_MUX_PMSYNC_STOPPED); \
TEXTCASE (MSPEVN_MUX_GET_H245_MSG); \
TEXTCASE (MSPEVN_DEMUX_PERIODIC_STATS); \
TEXTCASE (MSPEVN_DEMUX_CRC_ERR_REPORT); \
TEXTCASE (MSPEVN_VIDEO_RX_STOPPED); \
TEXTCASE (MSPEVN_VIDEO_IFRAME_H324); \
TEXTCASE (MSPEVN_VIDEO_IFRAME_RTPIP); \
TEXTCASE (MSPEVN_SKEW_OFFSET); 
/* ****!!!!  (end stripping) */

/************************************************************************\
 *                     MSPP UNSOLICITED DATA BUFFERS                    *
 *                                                                      *
\************************************************************************/


/*********************************************************************** \
 *              RTCP DATA BUFFER DEFINITONS for MSPEVN_RTCP_REPORT

 * NOTE:  The MSPEVN_RTCP_REPORT event's data buffer may contain
 *        more than one RTCP packet (defined below as rtcp_t).
 *        The first packet must be casted to the sructure rtcp_t_first and
 *    recurring packets casted to the structure rtcp_t.
 *        The difference between the first packet and recurring packets
 *        is that the first packet will contain filterID, a hexadecimal
 *        identifier which identifies what MSPP endpoint or filter
 *        this report is coming from.
 *
 * Some of the information in RTCP packets is stored in bit fields.
 * Since the treatment of fields depends on the compiler implementation,
 * we provide an alternative way to access this information besides the
 * bit field mechanism in C.
 *
 * Below are two mutually exclusive sets of structure definitions for
 * the parts of the RTCP packet that contain bit fields.  The first uses
 * bit fields, and if you are confident they will work with your
 * compiler, define RTCPPKT_BIT_FIELDS_SAFE to activate it.  The second
 * does not use bit fields, but instead aggregates them with nearby
 * objects into a 32 bit word.
 *
 * To access the information in the bit fields using the alternative
 * (non-field) structure definitions, we provide two macros for each
 * field, a mask and a shift.  An example of a read:
 *
 *  int get_count(rtcp_common_t common)
 *  {
 *      return (common & RTCPPKT_COM_COUNT_MASK)
 *          >> RTCPPKT_COM_COUNT_SHIFT;
 *  }
 *
 * An example of a write, which assumes argument "count" fits into its
 * field of RTCPPKT_COM_COUNT_MASK (5) bits, i.e. 0 <= count < 32:
 *
 *  void set_count(rtcp_common_t *common, int count)
 *  {
 *      *common = (*common & ~RTCPPKT_COM_COUNT_MASK)
 *          | (count << RTCPPKT_COM_COUNT_SHIFT);
 *  }

 \*********************************************************************/

#ifdef RTCPPKT_BIT_FIELDS_SAFE

/*
 * RTCP common header word
 */

typedef struct {
    unsigned int version:2; /* protocol version */
    unsigned int p:1;       /* padding flag */
    unsigned int count:5;   /* varies by packet type */
    unsigned int pt:8;      /* RTCP packet type */
    U16 length;             /* pkt len in words, w/o this word */
} rtcp_common_t;

/*
 * Reception report block
 */

typedef struct {
    U32 ssrc;                /* data source being reported */
    unsigned int fraction:8; /* fraction lost since last SR/RR */
    int lost:24;             /* cumul. no. pkts lost (signed!) */
    U32 last_seq;            /* extended last seq. no. received */
    U32 jitter;              /* interarrival jitter */
    U32 lsr;                 /* last SR packet from this source */
    U32 dlsr;                /* delay since last SR packet */
} rtcp_rr_t;

#else /* RTCPPKT_BIT_FIELDS_SAFE not defined */

/*
 * RTCP common header word
 */
typedef U32 rtcp_common_t;
#define RTCPPKT_COM_VERSION_MASK  0xC0000000
#define RTCPPKT_COM_VERSION_SHIFT 30
#define RTCPPKT_COM_P_MASK        0x20000000
#define RTCPPKT_COM_P_SHIFT       29
#define RTCPPKT_COM_COUNT_MASK    0x1F000000
#define RTCPPKT_COM_COUNT_SHIFT   24
#define RTCPPKT_COM_PT_MASK       0x00FF0000
#define RTCPPKT_COM_PT_SHIFT      16
#define RTCPPKT_COM_LENGTH_MASK   0x0000FFFF
#define RTCPPKT_COM_LENGTH_SHIFT  0

/*
 * Reception report block
 */
typedef struct {
    U32 ssrc;                /* data source being reported */
    U32 frac_and_lost;       /* originally fields fraction and lost */
#define RTCPPKT_RR_FRACTION_MASK  0xFF000000
#define RTCPPKT_RR_FRACTION_SHIFT 24
#define RTCPPKT_RR_LOST_MASK      0x00FFFFFF
#define RTCPPKT_RR_LOST_SHIFT     0
    U32 last_seq;            /* extended last seq. no. received */
    U32 jitter;              /* interarrival jitter */
    U32 lsr;                 /* last SR packet from this source */
    U32 dlsr;                /* delay since last SR packet */
} rtcp_rr_t;

#endif /* RTCPPKT_BIT_FIELDS_SAFE */

/*
 * SDES item
 */
typedef struct {
    U8 type;      /* type of item (rtcp_sdes_type_t) */
    U8 length;    /* length of item (in octets) */
    char data[1]; /* text, not null-terminated */
} rtcp_sdes_item_t;


/* RTCP packet */

typedef struct {

    rtcp_common_t common;      /* common header */
    union {
        struct {           /* sender report (SR) */
            U32 ssrc;        /* sender generating this report */
            U32 ntp_sec;     /* NTP timestamp, seconds */
            U32 ntp_frac;    /* NTP timestamp, seconds fraction */
            U32 rtp_ts;      /* RTP timestamp */
            U32 psent;       /* packets sent */
            U32 osent;       /* octets sent */
            rtcp_rr_t rr[1]; /* variable-length list */
        } sr;
        struct {           /* reception report (RR) */
            U32 ssrc;         /* receiver generating this report */
            rtcp_rr_t rr[1];  /* variable-length list */
        } rr;
        struct rtcp_sdes { /* source description (SDES) */
            U32 src;                  /* first SSRC/CSRC */
            rtcp_sdes_item_t item[1]; /* list of SDES items */
        } sdes;
        struct {           /* BYE */
            U32 src[1];       /* list of sources */
            /* can't express trailing text for reason */
        } bye;
    } r;

} rtcp_t;


/* First RTCP packet */

typedef struct {

    DWORD   FilterID;      /* MSPP Filter ID */
    DWORD   timestampA;    /* Use to calculate RTT.  See RFC 1889. */
    rtcp_t  rtcpPkt;       /* RTCP Packet defined above */

} rtcp_t_first;

typedef struct rtcp_sdes rtcp_sdes_t;


/****************************************************************************\
*
*           END OF RTCP DATA BUFFER DEFINITIONS
*
\****************************************************************************/



/*********************************************************************** \
 *        FAXRELAY DATA BUFFER DEFINITONS for events:
 *                 1. MSPEVN_FAXRELAY_FAX_BEGIN
 *                 2. MSPEVN_FAXRELAY_PASSED_PAGE
 *                 3. MSPEVN_FAXRELAY_FAX_END
 *
 * Note: All data structures returned by this event have a 32bit
 *       timestamp field.  The resolution of the timestamp is 10ms.
 *
 * 1. MSPEVN_FAXRELAY_FAX_BEGIN
 *     + This event *may* be generated (see below) when the beginning of
 *       a fax session is detected.  This event's data buffer contains a
 *       FAXRELAY_FAX_BEGIN data structure.
 *     + Information as to whether the gateway is emitting or receiving
 *       is provided with this event. The emitting gateway is connected
 *       to the calling facsimile equipment. The receiving gateway is
 *       connected to the called facimile equipment.
 *     + This event is generated only if the fax modulator/demodulator
 *       is configured to do so.  This is done by setting the
 *       FAXRELAY_EVENTMASK_REPT_FAX_BEGIN_END bit in the 'eventmask'
 *       field in the msp_FILTER_FAXRELAY_CONFIG command.
 *       (see mspcmd.h)
 *
 * 2. MSPEVN_FAXRELAY_PASSED_PAGE
 *     + This event *may* be generated (see below) when a page is
 *       successfully passed through a gateway (either emitting or receiving).
 *     + The total number of (incremental) pages passed is reported by
 *       this event.
 *     + This event is generated only if the fax modulator/demodulator
 *       is configured to do so.  This is done by setting the
 *       FAXRELAY_EVENTMASK_REPT_PASSED_PAGE bit in the 'eventmask'
 *       field in the msp_FILTER_FAXRELAY_CONFIG command.
 *       (see mspcmd.h)
 *
 * 3. MSPEVN_FAXRELAY_FAX_END
 *     + This event *may* be generated (see below) when the end of
 *       a fax session is detected.  This event's data buffer contains a
 *       FAXRELAY_SESSION_STATUS data structure (see below.)
 *     + Detailed information about the entire fax session is reported.
 *     + This event is generated only if the fax modulator/demodulator
 *       is configured to do so.  This is done by setting the
 *       FAXRELAY_EVENTMASK_REPT_FAX_BEGIN_END bit in the 'eventmask'
 *       field in the msp_FILTER_FAXRELAY_CONFIG command.
 *       (see mspcmd.h)
 *
 *====================================================
 *
 * FAXRELAY_SESSION_STATUS structure
 * ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 *  + This structure is provided with the MSPEVN_FAXRELAY_FAX_END event.
 *  + This structure is also returned with the MSP_QRY_FAXRELAY_SESSION_STATUS
 *    query.
 *  + Infomation contained in this structure:
 *     1. Timestamp when status was generated.
 *     2. Last connect rate.
 *     3. Whether session was ECM or non ECM.
 *     4. In ECM mode, number of ECM errors detected
 *        (count of PPR messages relayed).
 *     5. Whether polling was performed during the session.
 *     6. Total number of good pages emitted and received.
 *        (During polling pages can be transmitted and received.)
 *     7. Good pages emitted.
 *     8. Good pages received.
 * !!! MARKT CHECK !!!   9. Number of times the page modem was turned on (demod or remod.) !!! MARKT CHECK !!!
 *    10. Number of times during the session training was performed.
 * !!! MARKT CHECK !!!   11. Whether the high speed modem(page modem) modulator or demodulator !!! MARKT CHECK !!!
 *        was ever turned on.
 *    12. Whether the following T.30 messages were ever detected:
 *         a) DCN - Disconnect message. This DCN command indicates the
 *                  initiation of phase E of the T.30 protocol (call release).
 *         b) CRP - Command Repeat message. This (optional) CRP response
 *                  indicates that the previous command was received in
 *                  error and should be repeated in its entirety.
 *         c) CFR - Confirmation Received. A CFR response confirms that
 *                  the entire pre-message procedure (capabilites exchange
 *                  and training) has been completed and the message (page)
 *                  transmissions may commence.
 *         d) MCF - Message Confirmation. A MCF message indicates that a
 *                  complete message (page) has been satisfactorily received
 *                  and that additional messages (pages) may follow.
 *                  (This is a positive response to MPS, EOM, EOP, RR and PPS.)
 *         e) RTN - Retrain Negative. A RTN message indicates that the
 *                  previous message (page) has not been satisfactorily
 *                  received. However, further receptions may be possible,
 *                  provided training is retransmitted.
 *         f) RTP - Retrain Positive. A RTP message indicates that a
 *                  complete message (page) has been received and that
 *                  additional messages may follow after retransmission
 *                  of training and CFR.
 *
 *
 \*********************************************************************/

/* MSPEVN_FAXRELAY_FAX_BEGIN */
typedef struct {
    DWORD   FilterID;                   /* MSPP Filter ID                       */
    DWORD   EventId;                    /* MSPP Event ID                        */
    DWORD   timestamp;                  /* in milliseconds (10ms resolution)    */
    WORD    gateway;
            #define FAXRELAY_GATEWAY_EMITTING   0 /* Detected T.38 packet */
            #define FAXRELAY_GATEWAY_RECEIVING  1 /* Detected tonal CED   */
} FAXRELAY_FAX_BEGIN;

/* MSPEVN_FAXRELAY_PASSED_PAGE */
typedef struct {
    DWORD   FilterID;                   /* MSPP Filter ID                       */
    DWORD   EventId;                    /* MSPP Event ID                        */
    DWORD   timestamp;                  /* in milliseconds (10ms resolution)    */
    WORD    current_page_count;         /* incremental page count               */
    WORD    current_poll_page_count;    /* incremental poll page count          */
} FAXRELAY_PASSED_PAGE;


/* MSPEVN_FAXRELAY_FAX_END   */
/*
   Note: This event's data buffer contains the fax relay session status
         defined by the FAXRELAY_SESSION_STATUS data structure.
 */

typedef struct {
    WORD    value;
            #define FAXRELAY_STS_FLAGS_DCN_RCVD     0x0001
                    /* DCN (Disconnect) message was received            */
            #define FAXRELAY_STS_FLAGS_CRP_RCVD     0x0002
                    /* CRP (Command Repeat) message was received        */
            #define FAXRELAY_STS_FLAGS_CFR_RCVD     0x0004
                    /* CFR (Confirmation Received) message was received */
            #define FAXRELAY_STS_FLAGS_MCF_RCVD     0x0008
                    /* MCF (Message Confirmation) message was received  */
            #define FAXRELAY_STS_FLAGS_RTN_RCVD     0x0010
                    /* RTN (Retrain Negative) message was received      */
            #define FAXRELAY_STS_FLAGS_RTP_RCVD     0x0020
                    /* RTP (Retrain Possitive) message was received     */
            #define FAXRELAY_STS_FLAGS_HSM_RCVD     0x0040
                    /* High Speed Modem (Page modem) data was received  */
            #define FAXRELAY_STS_FLAGS_RESERVED     0x0080
                    /* reserved bit*/
            #define FAXRELAY_STS_FLAGS_V21BYTES_RCVD 0x0100
                    /* V.21 data was received  */
            #define FAXRELAY_STS_FLAGS_V21FRAME_START_RCVD 0x0200
            #define FAXRELAY_STS_FLAGS_V21FRAME_END_RCVD   0x0400
            #define FAXRELAY_STS_FLAGS_FCF_RCVD     0x0800

            #define FAXRELAY_STS_FLAGS_DIS_RCVD     0x1000
                    /*DIS (Digital Identification Signal) message was received*/
            #define FAXRELAY_STS_FLAGS_DCS_RCVD     0x2000
                    /*DCS (Digital Command Signal) message was received     */
            #define FAXRELAY_STS_FLAGS_NSF_RCVD     0x4000
                    /*NSF (Non Standard Facilities) message was received    */
            #define FAXRELAY_STS_FLAGS_DTC_RCVD     0x8000
                    /*DTC (Digital Transmit Command) message was received   */

} FAXRELAY_STS_FLAGS;

typedef struct {
    DWORD   FilterID;               /* MSPP Filter ID                            */
    DWORD   EventId;                /* MSPP Event ID                             */
    DWORD   timestamp;              /* in milliseconds. (10ms resolution)        */
    WORD    bitrate;                /* Last connect rate (2400 - 14400)          */
    WORD    ecm;                    /* Error Correction Mode (0=Non-ECM, 1=ECM)  */
    WORD    ecm_errors;             /* For ECM mode ONLY: Number of PPR messages received. */
    WORD    retrain_count;          /* For Non-ECM mode ONLY: RTN count          */
    WORD    page_count;             /* Pages passed                              */
    WORD    poll_ecm_errors;        /* Polling and ECM mode ONLY: Number of PPR messages received. */
    WORD    poll_retrain_count;     /* Polling and Non-ECM mode ONLY:RTN count   */
    WORD    poll_page_count;        /* Polling: Pages passed                     */
    WORD    page_modem_count;       /* Page modem count                          */
    WORD    tcf_count;              /* Train count                               */
    FAXRELAY_STS_FLAGS flags;       /* Status flags                              */
} FAXRELAY_SESSION_STATUS;



/****************************************************************************\
*           END OF FAXRELAY DATA BUFFER DEFINITIONS

\****************************************************************************/


/****************************************************************************/
/* Start of DPF Unsolicited Event Definitions                               */
/****************************************************************************/

typedef struct
{
   DWORD   FilterID;      /* MSPP Filter ID */
   DWORD   UnsolEventID;
   WORD    Data[1];
} DPF_DEBUG_EVENT_STRUCT;

typedef struct
{
   DWORD   FilterID;      /* MSPP Filter ID */
   DWORD   UnsolEventID;
   WORD    DtmfEventID;
   WORD    Duration;
   WORD    Volume;
} DPF_DTMF_EVENT_STRUCT;

typedef struct
{
   DWORD   FilterID;      /* MSPP Filter ID */
   DWORD   UnsolEventID;
   WORD    DtmfEventID;
} DPF_DTMF_PLAY_END_STRUCT;


/****************************************************************************/
/* End of DPF Unsolicited Event Definitions                                 */
/****************************************************************************/


/****************************************************************************/
/* Start of RTP endpoint Unsolicited Event Definitions                      */
/****************************************************************************/

#define LAST_DTMF_EVENT 0x80
typedef struct
{
   DWORD   FilterID;      /* MSPP Filter ID */
   U8      EvtID;
   U8      EvtVol;
   WORD    EvtDuration;
}DISASM_DTMF_EVENT_STRUCT;

typedef struct
{
	DWORD	FilterId;
	DWORD	offset;  //Offset value in ms
} msp_RTP_SKEW_OFFSET;


typedef struct
{
	DWORD	FilterId;
	DWORD	dciLen;  //Length of DCI buffer
    U8      dciData[MAX_DCI_BUF_SIZE];  //DCI data buffer
} msp_RTP_VIDEO_DCI;



/****************************************************************************/
/* End of RTP endpoint Unsolicited Event Definitions                        */
/****************************************************************************/

/****************************************************************************/
/* Start of MUX Endpoint Unsolicited Event Definitions					    */
/****************************************************************************/
typedef struct tag_msp_MUX_PMSYNC_STARTED
{
	DWORD	FilterId;
	WORD	EvnBase;
	WORD	EvnId;
} msp_MUX_PMSYNC_STARTED;

typedef struct tag_msp_MUX_PMSYNC_STOPPED
{
	DWORD	FilterId;
	WORD	EvnBase;
	WORD	EvnId;
} msp_MUX_PMSYNC_STOPPED;

typedef struct tag_msp_ENDPOINT_MUX_GET_H245_MSG
{
	DWORD	FilterId;
	WORD	EvnBase;
	WORD	EvnId;
	WORD	size;			// Size of received H.245 message
	WORD	SeqNo;			// Sequence Number
	char	Data[MAX_H245_MSG_SIZE]; // H.245 data buffer
} msp_MUX_GET_H245_MSG;

typedef struct tag_msp_ENDPOINT_DEMUX_PERIODIC_STATS
{
	DWORD	FilterId;
	WORD	EvnBase;
	WORD	EvnId;
    DWORD num_videoCRCerrors;
    DWORD num_videoCRCsuccesses;
    DWORD num_audioCRCerrors;
    DWORD num_audioCRCsuccesses;
    DWORD num_headerGolayerrors;
    DWORD num_headerGolaysuccesses;
    DWORD reserved1;  // possibly use for control CRC reports later on
    DWORD reserved2;
}  msp_ENDPOINT_DEMUX_PERIODIC_STATS;


typedef struct tag_msp_ENDPOINT_DEMUX_CRC_ERROR_REPORTS
{
	DWORD	FilterId;
	WORD	EvnBase;
	WORD	EvnId;
    DWORD error_check_type;       // 1 = video CRC check
                                // 2 = audio CRC check
                                // 4 = header Golay coding check
    DWORD total_num_errors;
}  msp_ENDPOINT_DEMUX_CRC_ERROR_REPORTS;

/****************************************************************************/
/* End of MUX Endpoint Unsolicited Event Definitions					    */
/****************************************************************************/


#endif /* ifndef MSPUNSOL_H */

